package model

import (
	"api_gateway/global"
	"gorm.io/gorm"
	"time"
)

type TestQuestions struct {
	Id            uint           `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	QuestionsType uint           `gorm:"column:questions_type;type:bigint;comment:试题类型：1.单选题 2.多选题 3.判读题;not null;" json:"questions_type"` // 试题类型：1.单选题 2.多选题 3.判读题
	Difficulty    uint           `gorm:"column:difficulty;type:bigint;comment:难度: 1.高 2.低;not null;" json:"difficulty"`                    // 难度: 1.高 2.低
	Cate1         string         `gorm:"column:cate1;type:varchar(20);comment:专业范围1;not null;" json:"cate1"`                               // 专业范围1
	Cate2         string         `gorm:"column:cate2;type:varchar(20);comment:专业范围2;not null;" json:"cate2"`                               // 专业范围2
	Author        string         `gorm:"column:author;type:varchar(20);comment:作者;not null;" json:"author"`                                // 作者
	TestQuestion  string         `gorm:"column:test_question;type:varchar(20);comment:试题题目;not null;" json:"test_question"`                // 试题题目
	AuthorId      uint           `gorm:"column:author_id;type:bigint;comment:作者工号;not null;" json:"author_id"`                             // 作者工号
	Founder       string         `gorm:"column:founder;type:varchar(20);comment:创建人;not null;" json:"founder"`                             // 创建人
	FounderId     uint           `gorm:"column:founder_id;type:bigint;comment:创建人id;not null;" json:"founder_id"`                          // 创建人id
	CreateTime    string         `gorm:"column:create_time;type:varchar(50);comment:创建时间;not null;" json:"create_time"`                    // 创建时间
	Reviewer      string         `gorm:"column:reviewer;type:varchar(20);comment:审核人;not null;" json:"reviewer"`                           // 审核人
	ReviewerId    uint           `gorm:"column:reviewer_id;type:bigint;comment:审核人id;not null;" json:"reviewer_id"`                        // 审核人id
	ValueA        string         `gorm:"column:value_a;type:varchar(20);comment:选项a;not null;" json:"value_a"`                             // 选项a
	ValueB        string         `gorm:"column:value_b;type:varchar(20);comment:选项b;not null;" json:"value_b"`                             // 选项b
	ValueC        string         `gorm:"column:value_c;type:varchar(20);comment:选项c;not null;" json:"value_c"`                             // 选项c
	ValueD        string         `gorm:"column:value_d;type:varchar(20);comment:选项d;not null;" json:"value_d"`                             // 选项d
	OptionAnswer  uint           `gorm:"column:option_answer;type:bigint;comment:选项答案：1.a 2.b 3.c 4.d;not null;" json:"option_answer"`     // 选项答案：1.a 2.b 3.c 4.d
	Analysis      string         `gorm:"column:analysis;type:varchar(30);comment:解析;not null;" json:"analysis"`                            // 解析
	Keywords      string         `gorm:"column:keywords;type:varchar(30);comment:关键字;not null;" json:"keywords"`                           // 关键字
	FounderName   string         `gorm:"column:founder_name;type:varchar(20);comment:创建人姓名;not null;" json:"founder_name"`                 // 创建人姓名
	ViewingRange  uint           `gorm:"column:viewing_range;type:bigint;comment:观看范围：1.内部 2.外部;not null;" json:"viewing_range"`           // 观看范围：1.内部 2.外部
	EnableStatus  string         `gorm:"column:enable_status;type:varchar(20);comment:启用状态: 1.已启用 2.未启用;not null;" json:"enable_status"`   // 启用状态: 1.已启用 2.未启用
	CreatedAt     time.Time      `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt     time.Time      `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt     gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (t *TestQuestions) TableName() string {
	return "test_questions"
}

func (t *TestQuestions) GetTestBy(id string) error {
	return global.DB.Where("id=?", id).Limit(1).First(&t).Error
}

func (t *TestQuestions) Create() error {
	return global.DB.Create(&t).Error
}

func (t *TestQuestions) Update() error {
	return global.DB.Updates(&t).Error
}

func (t *TestQuestions) Info(id uint) error {
	return global.DB.Where("id=?", id).Limit(1).First(&t).Error
}

func (t *TestQuestions) Del(id uint) error {
	return global.DB.Where("id=?", id).Delete(&t).Error
}

func (t *TestQuestions) List() (list []*TestQuestions, err error) {
	err = global.DB.Find(&list).Error
	if err != nil {
		return nil, err
	}
	return
}
